package com.founder.devwork.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.founder.devwork.dto.req.CommitLogQueryDTO;
import com.founder.devwork.dto.res.AuthorInfoDTO;
import com.founder.devwork.dto.res.CommitLogDTO;
import com.founder.devwork.dto.res.DistributionStatsDTO;
import com.founder.devwork.dto.res.HourlyStatsDTO;
import com.founder.devwork.dto.res.MonthlyEngineerStatsDTO;
import com.founder.devwork.dto.res.MonthlyRepoStatsDTO;
import com.founder.devwork.dto.res.TopCommitterDTO;
import com.founder.devwork.dto.res.TopRepositoryDTO;
import com.founder.devwork.dto.res.WeeklyStatsDTO;
import com.founder.devwork.entity.CommitLog;
import java.util.List;

/**
 * CommitLogService 用于操作 CommitLog 表。
 * 提供查询提交统计信息的方法。
 */
public interface CommitLogService extends IService<CommitLog> {
    /**
     * 查询提交次数最多的开发者
     *
     * @param limit 查询结果数量限制
     * @param sortBy 排序字段
     * @param sortDirection 排序方向（ASC/DESC）
     * @return TopCommitterDTO列表，包含开发者信息和提交统计
     */
    List<TopCommitterDTO> getTopByCommitCount(int limit, String sortBy, String sortDirection);

    /**
     * 查询上个月提交次数最多的开发者
     *
     * @param limit 查询结果数量限制
     * @param sortBy 排序字段
     * @param sortDirection 排序方向（ASC/DESC）
     * @return TopCommitterDTO列表，包含上个月活跃开发者信息
     */
    List<TopCommitterDTO> getTopLastMonthByCommitCount(int limit, String sortBy, String sortDirection);

    /**
     * 查询上个月变更最多的代码仓库
     *
     * @param limit 查询结果数量限制
     * @return TopRepositoryDTO列表，包含仓库变更统计信息
     */
    List<TopRepositoryDTO> getTopLastMonthRepositoriesByChanges(int limit);

    /**
     * 查询指定仓库过去12个月的每月统计
     *
     * @param gitInstance Git实例标识
     * @param repositoryId 仓库ID
     * @return MonthlyRepoStatsDTO列表，包含每月统计信息
     */
    List<MonthlyRepoStatsDTO> getMonthlyStatsForRepo(String gitInstance, String repositoryId);

    /**
     * 查询指定工程师过去12个月的每月统计
     *
     * @param engineerId 工程师ID
     * @return MonthlyEngineerStatsDTO列表，包含每月统计信息
     */
    List<MonthlyEngineerStatsDTO> getMonthlyStatsForEngineer(String engineerId);

    /**
     * 查询每小时提交统计
     *
     * @return HourlyStatsDTO列表，包含每小时统计信息
     */
    List<HourlyStatsDTO> getHourlyStats(String engineerId);

    /**
     * 查询每周提交统计
     *
     * @return WeeklyStatsDTO列表，包含每周统计信息
     */
    List<WeeklyStatsDTO> getWeeklyStats(String engineerId);

    /**
     * 查询提交变更量的分布（分桶）
     *
     * @return DistributionStatsDTO，包含分布统计信息
     */
    DistributionStatsDTO getCommitAmountDistribution();

    /**
     * 查询工程师每日变更量总和的分布（分桶）
     *
     * @return DistributionStatsDTO，包含分布统计信息
     */
    DistributionStatsDTO getDailyEngineerAmountDistribution();

    /**
     * 获取所有commit中distinct的author_fullname和author_email组合，并left join匹配的engineer_name
     * @return List of AuthorInfoDTO
     */
    List<AuthorInfoDTO> getDistinctAuthors();

    /**
     * 分页查询提交日志
     *
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @param query 查询条件
     * @return CommitLogDTO列表，包含提交日志信息
     */
    Page<CommitLogDTO> pageCommitLogsWithQuery(int pageNum, int pageSize, CommitLogQueryDTO query);
}
